<template>
  <div class="app-container">
    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
      <el-form-item label="地区" prop="area">
        <el-select v-model="queryParams.area" placeholder="请选择地区" clearable size="small">
          <el-option
            v-for="dict in areaOptions"
            :key="dict.dictValue"
            :label="dict.dictLabel"
            :value="dict.dictValue"
          />
        </el-select>
      </el-form-item>
      <el-form-item label="状态" prop="type">
        <el-select v-model="queryParams.bak1" placeholder="请选择状态" clearable size="small">
          <el-option
            v-for="dict in statusOptions"
            :key="dict.dictValue"
            :label="dict.dictLabel"
            :value="dict.dictValue"
          />
        </el-select>
      </el-form-item>
      <el-form-item label="名称" prop="name">
        <el-input
          v-model="queryParams.name"
          placeholder="请输入名称"
          clearable
          size="small"
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <el-form-item label="房屋类型" prop="houseType">
        <el-select v-model="queryParams.houseType" placeholder="请选择房屋类型" clearable size="small">
          <el-option
            v-for="dict in houseTypeOptions"
            :key="dict.dictValue"
            :label="dict.dictLabel"
            :value="dict.dictValue"
          />
        </el-select>
      </el-form-item>
      <!-- <el-form-item label="房屋面积" prop="houseArea">
         <el-input
           v-model="queryParams.houseArea"
           placeholder="请输入房屋面积"
           clearable
           size="small"
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>-->
      <el-form-item label="朝向" prop="toward">
        <el-select v-model="queryParams.toward" placeholder="请选择朝向" clearable size="small">
          <el-option
            v-for="dict in towardOptions"
            :key="dict.dictValue"
            :label="dict.dictLabel"
            :value="dict.dictValue"
          />
        </el-select>
      </el-form-item>
      <!-- <el-form-item label="费用" prop="money">
         <el-input
           v-model="queryParams.money"
           placeholder="请输入费用"
           clearable
           size="small"
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>-->
      <el-form-item>
        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
      </el-form-item>
    </el-form>

    <el-row :gutter="10" class="mb8">
      <el-col :span="1.5">
        <el-button
          type="primary"
          icon="el-icon-plus"
          size="mini"
          @click="handleAdd"
          v-hasPermi="['member:house:add']"
        >新增
        </el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="success"
          icon="el-icon-edit"
          size="mini"
          :disabled="single"
          @click="handleUpdate"
          v-hasPermi="['member:house:edit']"
        >修改
        </el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="danger"
          icon="el-icon-delete"
          size="mini"
          :disabled="multiple"
          @click="handleDelete"
          v-hasPermi="['member:house:remove']"
        >删除
        </el-button>
      </el-col>
      <!-- <el-col :span="1.5">
         <el-button
           type="warning"
           icon="el-icon-download"
           size="mini"
           @click="handleExport"
           v-hasPermi="['member:house:export']"
         >导出</el-button>
       </el-col>-->
    </el-row>

    <el-table v-loading="loading" :data="houseList" @selection-change="handleSelectionChange">
      <el-table-column type="selection" width="55" align="center"/>
      <el-table-column label="名称" align="center" prop="name"/>
      <el-table-column label="图片" align="center" prop="cover" >
        <template slot-scope="scope">
          <el-image :src="imgpre+ scope.row.cover"  :preview-src-list="showImg(scope.row)"></el-image>
        </template>
      </el-table-column>
      <el-table-column label="状态" align="center" prop="bak1" :formatter="bakFormat" />
      <el-table-column label="地区" align="center" prop="area" :formatter="areaFormat"/>
      <el-table-column label="房屋类型" align="center" prop="houseType" :formatter="houseTypeFormat"/>
      <el-table-column label="房屋面积" align="center" prop="houseArea"/>
      <el-table-column label="朝向" align="center" prop="toward" :formatter="towardFormat"/>
      <el-table-column label="费用" align="center" prop="money"/>
      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
        <template slot-scope="scope">
          <el-button
            size="mini"
            type="text"
            icon="el-icon-edit"
            @click="handleUpdate(scope.row)"
            v-hasPermi="['member:house:edit']"
          >修改
          </el-button>
          <el-button
            size="mini"
            type="text"
            icon="el-icon-delete"
            @click="handleDelete(scope.row)"
            v-hasPermi="['member:house:remove']"
          >删除
          </el-button>
        </template>
      </el-table-column>
    </el-table>

    <pagination
      v-show="total>0"
      :total="total"
      :page.sync="queryParams.pageNum"
      :limit.sync="queryParams.pageSize"
      @pagination="getList"
    />

    <!-- 添加或修改服务 租房对话框 -->
    <el-dialog :title="title" :visible.sync="open" width="800px">
      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
        <el-form-item label="名称" prop="name">
          <el-input v-model="form.name" placeholder="请输入名称"/>
        </el-form-item>
        <!--  <el-form-item label="主键" prop="id">
            <el-input v-model="form.id" placeholder="请输入主键" />
          </el-form-item>-->
        <el-form-item label="地区">
          <el-select v-model="form.area" placeholder="请选择地区">
            <el-option
              v-for="dict in areaOptions"
              :key="dict.dictValue"
              :label="dict.dictLabel"
              :value="dict.dictValue"
            ></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="图片地址" prop="album">

          <el-upload
            :action="uploadImgUrl"
            list-type="picture-card"
            :limit="4"
            accept=".jpg,.jpeg,.png,.gif,.bmp"
            :class="{disabled:uploadDisabled}"
            :on-success="handleAvatarSuccess"
            :file-list="imgList"
            :before-upload="beforeAvatarUpload"
            :on-preview="handlePictureCardPreview"
            :on-remove="handleRemove">
            <i class="el-icon-plus"></i>
            <div slot="tip" class="el-upload-tip">.支持jpg、png、gif、jpeg格式的图片</div>
            <div slot="tip" class="el-upload-tip">.图片尺寸1500PX*1000PX，文件大小不超过2M</div>
          </el-upload>
        </el-form-item>
        <el-form-item label="房屋类型">
          <el-select v-model="form.houseType" placeholder="请选择房屋类型">
            <el-option
              v-for="dict in houseTypeOptions"
              :key="dict.dictValue"
              :label="dict.dictLabel"
              :value="dict.dictValue"
            ></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="房屋面积" prop="houseArea">
          <el-input v-model="form.houseArea"  onkeyup="value=value.replace(/^\D*(\d*(?:\.\d{0,2})?).*$/g, '$1')"   placeholder="请输入房屋面积"/>
        </el-form-item>
        <el-form-item label="朝向">
          <el-select v-model="form.toward" placeholder="请选择朝向">
            <el-option
              v-for="dict in towardOptions"
              :key="dict.dictValue"
              :label="dict.dictLabel"
              :value="dict.dictValue"
            ></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="费用" prop="money">
          <el-input v-model="form.money"    onkeyup="value=value.replace(/^\D*(\d*(?:\.\d{0,2})?).*$/g, '$1')"  placeholder="请输入费用"/>
        </el-form-item>
        <el-form-item label="房屋介绍" prop="context">
          <!--          <el-input      :headers="headers"    v-model="form.context"   placeholder="请输入房屋介绍" />-->
          <el-upload
            class="avatar-uploader quill-img"
            :action="uploadImgUrl"
            name="file"

            :show-file-list="false"
            :on-success="quillImgSuccess"
            :on-error="uploadError"
            :before-upload="quillImgBefore"
            accept='.jpg,.jpeg,.png,.gif'
          ></el-upload>

          <quill-editor
            class="editor"
            v-model="form.context"
            ref="quillEditor"
            :options="editorOption"
            @blur="onEditorBlur($event)"
            @focus="onEditorFocus($event)"
            @change="onEditorChange($event)"
          ></quill-editor>
        </el-form-item>
        <!-- <el-form-item label="备用字段1" prop="bak1">
           <el-input v-model="form.bak1" placeholder="请输入备用字段1" />
         </el-form-item>
         <el-form-item label="备用字段2" prop="bak2">
           <el-input v-model="form.bak2" placeholder="请输入备用字段2" />
         </el-form-item>
         <el-form-item label="备用字段3" prop="bak3">
           <el-input v-model="form.bak3" placeholder="请输入备用字段3" />
         </el-form-item>-->
      </el-form>
      <div slot="footer" class="dialog-footer" style="margin-top: 20px">
        <el-button type="primary" @click="submitForm(1)">发 布</el-button>

        <el-button type="primary" @click="submitForm(0)">草稿箱</el-button>
        <el-button @click="cancel">取 消</el-button>
      </div>
    </el-dialog>
  </div>
</template>

<script>
  import {listHouse, getHouse, delHouse, addHouse, updateHouse, exportHouse} from "@/api/member/house";
  import {getToken} from '@/utils/auth'
  import defaultSettings from '@/settings'
  // 工具栏配置
  const toolbarOptions = [
    ["bold", "italic", "underline", "strike"],       // 加粗 斜体 下划线 删除线
    ["blockquote", "code-block"],                    // 引用  代码块
    [{list: "ordered"}, {list: "bullet"}],       // 有序、无序列表
    [{indent: "-1"}, {indent: "+1"}],            // 缩进
    [{size: ["small", false, "large", "huge"]}],   // 字体大小
    [{header: [1, 2, 3, 4, 5, 6, false]}],         // 标题
    [{color: []}, {background: []}],             // 字体颜色、字体背景颜色
    [{align: []}],                                 // 对齐方式
    ["clean"],                                       // 清除文本格式
    ["link", "image", "video"]                       // 链接、图片、视频
  ];

  import {quillEditor} from "vue-quill-editor";
  import "quill/dist/quill.core.css";
  import "quill/dist/quill.snow.css";
  import "quill/dist/quill.bubble.css";

  export default {
    props: {
      /* 编辑器的内容 */
      value: {
        type: String
      },
      /* 图片大小 */
      maxSize: {
        type: Number,
        default: 4000 //kb
      }
    },
    components: {quillEditor},
    name: "House",
    data() {
      return {
        imgpre: defaultSettings.ossPreview,// 上传的图片服务器地址
        // 遮罩层
        loading: true,
        // 选中数组
        ids: [],
        // 非单个禁用
        single: true,
        // 非多个禁用
        multiple: true,
        // 总条数
        total: 0,
        statusOptions:[],
        // 服务 租房表格数据
        houseList: [],
        // 弹出层标题
        title: "",
        // 是否显示弹出层
        open: false,
        // 地区字典
        areaOptions: [],
        // 房屋类型 一室一厅字典
        houseTypeOptions: [],
        imgList:[],
        // 朝向字典
        towardOptions: [],
        // 查询参数
        queryParams: {
          pageNum: 1,
          pageSize: 10,
          area: undefined,
          name: undefined,
          houseType: undefined,
          houseArea: undefined,
          toward: undefined,
          money: undefined,
          orderByColumn:'id',
          isAsc:'desc'
        },
        // 表单参数
        form: {imgList: []},
        // 表单校验
        rules: {
          area: [
            {required: true, message: "地区不能为空", trigger: "blur"}
          ],
          name: [
            {required: true, message: "名称不能为空", trigger: "blur"}
          ],
          houseType: [
            {required: true, message: "房屋类型 一室一厅不能为空", trigger: "blur"}
          ],
          houseArea: [
            {required: true, message: "房屋面积不能为空", trigger: "blur"}
          ],
          toward: [
            {required: true, message: "朝向不能为空", trigger: "blur"}
          ],
          money: [
            {required: true, message: "费用不能为空", trigger: "blur"}
          ],
          context: [
            {required: true, message: "房屋介绍不能为空", trigger: "blur"}
          ],
        },
        editorOption: {
          placeholder: "",
          theme: "snow", // or 'bubble'
          placeholder: "请输入内容",
          modules: {
            toolbar: {
              container: toolbarOptions,
              handlers: {
                image: function (value) {
                  if (value) {
                    // 触发input框选择图片文件
                    document.querySelector(".quill-img input").click();
                  } else {
                    this.quill.format("image", false);
                  }
                }
              }
            }
          }
        },
        uploadImgUrl: process.env.VUE_APP_BASE_API + "/common/upload/oss", // 上传的图片服务器地址
        // headers: {
        //   Authorization: 'Bearer ' + getToken()
        // }
      };
    },
    created() {
      this.getList();
      this.getDicts("sys_area").then(response => {
        this.areaOptions = response.data;
      });
      this.getDicts("house_type").then(response => {
        this.houseTypeOptions = response.data;
      });
      this.getDicts("house_toward").then(response => {
        this.towardOptions = response.data;
      });
      this.getDicts("service_status").then(response => {
        this.statusOptions = response.data;
      });
    },
    computed: {
      uploadDisabled: function () {
        return this.form.imgList.length == 3
      },
    },
    methods: {

      showImg(e) {
        let array = [];
        let tmp=[];
        if(e.album){
          tmp= e.album.split(",");
        }

        let that=this;
        tmp.forEach(function (curr, index, arr) {
          array.push(that.imgpre + curr);
        })
        return array;
      },
      handleRemove(file, fileList) {
        this.form.imgList = [];
        that=this;
        fileList.forEach(function (curr, index, arr) {
          that.form.imgList.push(curr.response.imgUrl)
        })
      },
      handlePictureCardPreview(file) {
        this.dialogImageUrl = file.url;
        this.dialogVisible = true;
      },
      beforeAvatarUpload(file) {
        console.log(file.type.indexOf("image/jpeg,image/png"))
        const isJPG = (file.type === 'image/jpeg' || file.type === 'image/png' || file.type === 'image/tif');
        const isLt2M = file.size / 1024 / 1024 < 2;

        if (!isJPG) {
          this.$message.error('上传头像图片只能是 图片jpg、png、tif 格式!');
        }
        if (!isLt2M) {
          this.$message.error('上传头像图片大小不能超过 2MB!');
        }
        return isJPG && isLt2M;
      },
      handleAvatarSuccess(res) {
        this.form.imgList.push(res.imgUrl);
      },
      onEditorBlur() {
        //失去焦点事件
      },
      onEditorFocus() {
        //获得焦点事件
      },
      onEditorChange() {
        //内容改变事件
        this.$emit("input", this.content);
      },

      // 富文本图片上传前
      quillImgBefore(file) {
        let fileType = file.type;
        if (fileType === 'image/jpeg' || fileType === 'image/png') {
          return true;
        } else {
          this.$message.error('请插入图片类型文件(jpg/jpeg/png)');
          return false;
        }
      },

      quillImgSuccess(res, file) {
        // res为图片服务器返回的数据
        // 获取富文本组件实例
        let quill = this.$refs.quillEditor.quill;
        // 如果上传成功
        if (res.code == 200) {
          // 获取光标所在位置
          let length = quill.getSelection().index;
          // 插入图片  res.url为服务器返回的图片地址
          quill.insertEmbed(length, "image", this.imgpre + res.imgUrl);
          // 调整光标到最后
          quill.setSelection(length + 1);
        } else {
          this.$message.error("图片插入失败");
        }
      },
      // 富文本图片上传失败
      uploadError() {
        // loading动画消失
        this.$message.error("图片插入失败");
      },
      /** 查询服务 租房列表 */
      getList() {
        this.loading = true;

        listHouse(this.queryParams).then(response => {

          this.houseList = response.rows;
          this.total = response.total;
          this.loading = false;
        });
      },
      // 地区字典翻译
      areaFormat(row, column) {
        return this.selectDictLabel(this.areaOptions, row.area);
      },
      bakFormat(row, column) {
        return this.selectDictLabel(this.statusOptions, row.bak1);
      },
      // 房屋类型 一室一厅字典翻译
      houseTypeFormat(row, column) {
        return this.selectDictLabel(this.houseTypeOptions, row.houseType);
      },
      // 朝向字典翻译
      towardFormat(row, column) {
        return this.selectDictLabel(this.towardOptions, row.toward);
      },
      // 取消按钮
      cancel() {
        this.open = false;
        this.reset();
      },
      // 表单重置
      reset() {
        this.form = {
          id: undefined,
          area: undefined,
          name: undefined,
          houseType: undefined,
          houseArea: undefined,
          toward: undefined,
          money: undefined,
          context: undefined,
          bak1: undefined,
          bak2: undefined,
          bak3: undefined,
          imgList:[],
          createBy: undefined,
          createTime: undefined,
          updateBy: undefined,
          updateTime: undefined
        };
        this.resetForm("form");
      },
      /** 搜索按钮操作 */
      handleQuery() {
        this.queryParams.pageNum = 1;
        this.getList();
      },
      /** 重置按钮操作 */
      resetQuery() {
        this.resetForm("queryForm");
        this.handleQuery();
      },
      // 多选框选中数据
      handleSelectionChange(selection) {
        this.ids = selection.map(item => item.id)
        this.single = selection.length != 1
        this.multiple = !selection.length
      },
      /** 新增按钮操作 */
      handleAdd() {
        this.reset();
        this.open = true;
        this.form.imgList=[];
        this.imgList= [];
        this.title = "添加租房服务";
      },
      /** 修改按钮操作 */
      handleUpdate(row) {
        this.reset();
        const id = row.id || this.ids
        getHouse(id).then(response => {

          this.form.imgList = [];
          this.imgList = [];//这里是踩坑的点，必须写
          this.form = response.data;
          this.form.imgList=[];
          let array1=[];
          let array2=[];
          let that=this;
          if (this.form.album) {
            let array = this.form.album.split(",");
            array.forEach(function (curr, index, arr) {
              array1.push(curr);
              array2.push({url:that.imgpre + curr})
            })
          }
          this.form.imgList=array1;
          this.imgList=array2;
          this.open = true;
          this.title = "修改服务租房";
        });
      },
      /** 提交按钮 */
      checkFrom(param){
        if(!param.name){
          this.msgError("请输入标题！");
          return 0;
        }
        /* if(!param.columns){
           this.msgError("请选择栏目！");
           return 0;
         }*/
        if(!param.area ){
          this.msgError("请选择地区！");
          return 0;
        }
        if(!param.houseType){
          this.msgError("请输入房屋类型！");
          return 0;
        }
        if(!param.houseArea){
          this.msgError("请输入房屋面积！");
          return 0;
        }
        if(!param.money  ){
          this.msgError("请输入费用！");
          return 0;
        }
        if(!param.context){
          this.msgError("请输入内容！");
          return 0;
        }
        if(this.form.imgList.length==0){
          this.msgError("请选择图片！");
          return 0;
        }
        return  1;
      },
      /** 提交按钮 审核通过*/
      submitForm: function (e) {
        if(e==1){
          let flag=this.checkFrom(this.form);
          if(flag==0){
            return ;
          }

        }
        if(this.form.imgList.length!=0){
          this.form.album=this.form.imgList.join(",");
        }
        this.form.bak1=e;
        this.$refs["form"].validate(valid => {
          if (valid) {
            if (this.form.id != undefined) {
              updateHouse(this.form).then(response => {
                if (response.code === 200) {
                  this.msgSuccess("修改成功");
                  this.open = false;
                  this.getList();
                } else {
                  this.msgError(response.msg);
                }
              });
            } else {
              addHouse(this.form).then(response => {
                if (response.code === 200) {
                  this.msgSuccess("新增成功");
                  this.open = false;
                  this.getList();
                } else {
                  this.msgError(response.msg);
                }
              });
            }
          }
        });
      },
      /** 删除按钮操作 */
      handleDelete(row) {
        const ids = row.id || this.ids;
        this.$confirm('是否确认删除服务 租房编号为"' + ids + '"的数据项?', "警告", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        }).then(function () {
          return delHouse(ids);
        }).then(() => {
          this.getList();
          this.msgSuccess("删除成功");
        }).catch(function () {
        });
      },
      /** 导出按钮操作 */
      handleExport() {
        const queryParams = this.queryParams;
        this.$confirm('是否确认导出所有服务 租房数据项?', "警告", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        }).then(function () {
          return exportHouse(queryParams);
        }).then(response => {
          this.download(response.msg);
        }).catch(function () {
        });
      }
    }
  };
</script>
<style>
  .editor {
    line-height: normal !important;
    height: 192px;
  }

  .quill-img {
    display: none;
  }

  .ql-snow .ql-tooltip[data-mode="link"]::before {
    content: "请输入链接地址:";
  }

  .ql-snow .ql-tooltip.ql-editing a.ql-action::after {
    border-right: 0px;
    content: "保存";
    padding-right: 0px;
  }

  .ql-snow .ql-tooltip[data-mode="video"]::before {
    content: "请输入视频地址:";
  }

  .ql-snow .ql-picker.ql-size .ql-picker-label::before,
  .ql-snow .ql-picker.ql-size .ql-picker-item::before {
    content: "14px";
  }

  .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="small"]::before,
  .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="small"]::before {
    content: "10px";
  }

  .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="large"]::before,
  .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="large"]::before {
    content: "18px";
  }

  .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="huge"]::before,
  .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="huge"]::before {
    content: "32px";
  }

  .ql-snow .ql-picker.ql-header .ql-picker-label::before,
  .ql-snow .ql-picker.ql-header .ql-picker-item::before {
    content: "文本";
  }

  .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
  .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
    content: "标题1";
  }

  .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before,
  .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
    content: "标题2";
  }

  .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before,
  .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
    content: "标题3";
  }

  .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before,
  .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
    content: "标题4";
  }

  .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before,
  .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
    content: "标题5";
  }

  .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before,
  .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
    content: "标题6";
  }

  .ql-snow .ql-picker.ql-font .ql-picker-label::before,
  .ql-snow .ql-picker.ql-font .ql-picker-item::before {
    content: "标准字体";
  }

  .ql-snow .ql-picker.ql-font .ql-picker-label[data-value="serif"]::before,
  .ql-snow .ql-picker.ql-font .ql-picker-item[data-value="serif"]::before {
    content: "衬线字体";
  }

  .ql-snow .ql-picker.ql-font .ql-picker-label[data-value="monospace"]::before,
  .ql-snow .ql-picker.ql-font .ql-picker-item[data-value="monospace"]::before {
    content: "等宽字体";
  }

  .disabled .el-upload--picture-card{
    display: none;
  }
  .el-upload-tip{
    color: #AAAAAA;
    line-height: 1.7;
    font-size: 12px;
  }
</style>
